// 将一个多维数组变为一维数组：[1, [2, 3, [4, 5]]]  ------>    [1, 2, 3, 4, 5]
// 1.ES6的flat()
let arr = [1, [2, 3, [4, 5]]]
let a1 = arr.flat(Infinity)
console.log(a1) // [ 1, 2, 3, 4, 5 ]

// 2.序列化后正则
let a2 = JSON.stringify(arr).replace(/(\[|\])/g, '')
a2 = '[' + a2 + ']'
console.log(JSON.parse(a2)) // [ 1, 2, 3, 4, 5 ]

// 3.递归处理
function flat (arr) {
    let result = []
    for (const item of arr) {
        item instanceof Array ? result = result.concat(flat(item)) : result.push(item)
    }
    return result
}

console.log(flat(arr)) // [ 1, 2, 3, 4, 5 ]

// 4.reduce
function flatReduce (arr) {
    return arr.reduce((prev, current) => {
        return prev.concat(current instanceof Array ? flatReduce(current) : current)
    }, [])
}

console.log(flatReduce(arr)) // [ 1, 2, 3, 4, 5 ]

// 5.迭代+扩展运算符
let arr5 = [1, [1, 2], [1, 2, 3, [4, 4, 4]]]
// 每次while都会合并一层的元素，然后arr.some判定数组中是否存在数组，如果存在，继续进入第二次循环进行合并
while (arr5.some(Array.isArray)) {
    arr5 = [].concat(...arr5)
}

console.log(arr5) // [1, 1, 2, 1, 2, 3, 4, 4, 4]


